package com.estronger.shopmanage.utils;

import android.content.Context;
import android.net.Uri;
import android.text.TextUtils;
import android.widget.ImageView;

import com.estronger.shopmanage.R;
import com.soonfor.evaluate.activity.ShowPicActivity;
import com.soonfor.evaluate.tools.ImageUtils;
import com.soonfor.evaluate.tools.UserInfo;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;

import java.io.File;
import java.util.HashMap;
import java.util.Map;


/**
 * 图片展示工具类
 */
public class ImageShowUtls {

    private Context context;
    //    public RequestOptions requestOptions;
    private int transparent;//透明
    String imgurl_head = "";//图片上传下载地址
    private volatile static ImageShowUtls mInstance;

    //单例模式，其实这里可以不用DLC形式的
    public static ImageShowUtls getInstance(Context context) {
        if (mInstance == null) {
            synchronized (ImageShowUtls.class) {
                mInstance = new ImageShowUtls(context);
            }
        }
        return mInstance;
    }

    private Map<Integer, Integer> pxMap;//几种dp对应的px，避免每次都计算

    public ImageShowUtls(Context context) {
        this.context = context;
        this.transparent = context.getResources().getColor(android.R.color.transparent);
        initPxMap();
    }

    //初始化界面
    private void initPxMap() {
        pxMap = new HashMap<>();
        pxMap.put(80, ScreenUtils.dip2px(context, 80));
        pxMap.put(100, ScreenUtils.dip2px(context, 100));
        pxMap.put(110, ScreenUtils.dip2px(context, 110));
        pxMap.put(140, ScreenUtils.dip2px(context, 140));
        int screenW = ScreenUtils.getWidthPix(context);
        pxMap.put(screenW, screenW);
    }

    public void putPxMap(int key){
        if(pxMap == null) pxMap = new HashMap<>();
        pxMap.put(key, key);
    }

    /**
     * 显示头像
     *
     * @param img
     * @param filePath
     * @param defaultId
     */
    public void showHeadPortrait(ImageView img, String filePath, int defaultId) {
        try {
            if (imgurl_head.equals("")) {
                init();
            }
            if (TextUtils.isEmpty(filePath)) {
                img.setImageResource(defaultId);
            } else {
                if (filePath.startsWith("/storage")) {//本地文件
                    Picasso.with(context).load(new File(filePath))
                            .placeholder(defaultId)
                            .error(defaultId)
                            .into(img);
                } else {//网络或服务器图片
                    String finalurl = filePath.startsWith("http") ? filePath : (imgurl_head + filePath);
                    if (defaultId == 0) {
                        defaultId = R.mipmap.zanuw;
                    }
                    Picasso.with(context).load(finalurl)
                            .fit()
                            .placeholder(defaultId)
                            .error(defaultId)
                            .into(img);
                }
            }
        } catch (Exception e) {
            e.fillInStackTrace();
        }
    }

    /**
     * 显示图片
     *
     * @param img
     * @param uri
     * @param defaultId
     */
    public void showImage(ImageView img, Uri uri, int defaultId) {
        try {
            if (defaultId == 0) {
                defaultId = R.mipmap.zanuw;
            }
            Picasso.with(context).load(uri)
                    .placeholder(defaultId)
                    .error(defaultId)
                    .into(img);
        } catch (Exception e) {
            e.fillInStackTrace();
        }
    }

    /**
     * 显示图片
     *
     * @param img
     * @param imgF
     * @param defaultId
     */
    public void showImage(ImageView img, File imgF, int defaultId) {
        try {
            if (defaultId == 0) {
                defaultId = R.mipmap.zanuw;
            }
            Picasso.with(context).load(imgF)
                    .placeholder(defaultId)
                    .error(defaultId)
                    .into(img);
        } catch (Exception e) {
            e.fillInStackTrace();
        }
    }



    /**
     * 显示指定宽高的图片
     *
     * @param imageView
     * @param filePath
     * @param defaultId 占位默认图
     * @param hightpx   指定高度
     * @param wightpx   指定宽度
     * @param smallMode 缩放模式
     *                  hw://指定高宽缩放(可能变形)
     *                  w://指定宽，高度按比例缩放
     *                  h://指定高，宽度按比例缩放
     *                  cut://指定宽高裁剪(不变形，但可能显示不全)
     */
    public void showImageWhithSize(final ImageView imageView, String filePath, int defaultId, int wightpx, int hightpx, String smallMode) {
        try {
            if (TextUtils.isEmpty(filePath)) {
                imageView.setImageResource(defaultId);
            } else {
                String finalUrl = filePath.trim();
                if (finalUrl.startsWith("/storage")) {//本地文件
                    Picasso.with(context).load(new File(finalUrl))
                            .placeholder(defaultId)
                            .error(defaultId)
                            .into(imageView);
                } else {//网络或服务器图片
                    if (filePath.startsWith("http")) {
                        finalUrl = filePath;
                    } else if (TextUtils.isEmpty(smallMode)) {
                        finalUrl = imgurl_head + filePath;
                    }else {
                        if (pxMap == null) initPxMap();
                        else if (smallMode.equals("w")) {
                            if (!pxMap.containsKey(wightpx)) initPxMap();
                            finalUrl = imgurl_head + filePath + "&issmall=1&smallmode=w&w=" + pxMap.get(wightpx);
                        } else if (smallMode.equals("h")) {
                            if (!pxMap.containsKey(hightpx)) initPxMap();
                            finalUrl = imgurl_head + filePath + "&issmall=1&smallmode=h&h=" + pxMap.get(hightpx);
                        } else if (smallMode.equals("hw") || smallMode.equals("cut")) {
                            if (!pxMap.containsKey(hightpx) || !pxMap.containsKey(wightpx))
                                initPxMap();
                            finalUrl = imgurl_head + filePath + "&issmall=1&smallmode=" + smallMode + "&h=" + pxMap.get(hightpx) + "&w=" + pxMap.get(wightpx);
                        }
                    }

                    Picasso.with(context).load(finalUrl)
                            .placeholder(defaultId)
                            .error(defaultId)
                            .into(imageView);
                }
            }
        } catch (Exception e) {
            e.fillInStackTrace();
        }
    }
//
//    /**
//     * 计算压缩图片的宽高
//     */
//    public Integer[] getCompressPicSize(int curPicWidth, int curPicHeight, int picMaxH) {
//        int gcd = getGCD(curPicWidth, curPicHeight);
//        int ratioW = curPicWidth / gcd;
//        int ratioH = curPicHeight / gcd;
//        int newGCD;
//        if (curPicWidth > curPicHeight) {
//            newGCD = getOptimumGCD(picMaxH, ratioW);
//        } else {
//            newGCD = getOptimumGCD(picMaxH, ratioH);
//        }
//        int compressPicWidth = newGCD * ratioW; // 压缩后的宽高
//        int compressPicHeight = newGCD * ratioH;
//        return new Integer[]{compressPicWidth, compressPicHeight};
//    }
//    /**
//     * 获取最小公约数
//     * @param w 宽
//     * @param h 高
//     * @return
//     */
//    public int getGCD(int w,int h){
//        int result = 0;
//        while (h != 0){
//            result = w % h;
//            w = h;
//            h = result;
//        }
//        return w;
//    }
//    /**
//     * 计算出最佳公约数
//     * @param ratio
//     * @return
//     */
//    public int getOptimumGCD(int picMaxH, int ratio){
//        return  picMaxWH / ratio;
//    }

    public void init() {
        try {
            imgurl_head = UserInfo.DOWNLOAD_FILE + "?filepath=";
        } catch (Exception e) {
            imgurl_head = "";
        }
    }
}

